import { login, getUserInfoAPI, getUserDetailByIdAPI } from '@/api/user'
import { getToken, removeToken, setToken } from '@/utils/auth'

export default {
  namespaced: true,
  state: {
    token: getToken() || '',
    // 因为初始值为空，刷新的时候，所有源代码会重置，所以token会被重置为空
    userInfo: ''
  },
  mutations: {
    setToken(state, valuetoken) {
      // 存入vuex
      state.token = valuetoken
      // 存入本地cookie
      setToken(valuetoken)
    },
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    },
    clearUserInfo(state) {
      state.token = ''
      state.userInfo = {}
      removeToken()
    }
  },
  actions: {
    async fetchlogin({ commit }, { mobile, password }) {
      // 第一个参数ctx是上下文对象
      // ctx.commit  提交mutation
      // ctx.dispatch  提交action
      // 第二个参数是传过来的账号和密码（可以不解构写成一个，比如form）

      // 1.调用接口请求， 登录
      const res = await login({ mobile, password })
      // 2.拿到请求返回值，提交mutation函数进行修改
      commit('setToken', res)
    },
    async getUserInfo({ commit }) {
      // 1.发请求
      const res = await getUserInfoAPI()
      // 插入头像请求
      const res1 = await getUserDetailByIdAPI(res.userId)
      // 2.调用mutation
      commit('setUserInfo', { ...res, ...res1 })
    }
  }
}

// 组件中只要做一件事，调用action函数，并传递正确的参数
